﻿using System;
using System.Text;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Collections.Generic;
using Model;

namespace Db.DAL
{
    /// <summary>
    /// 对象名称：基础对象名称OleDb数据访问子类（数据访问层）
    /// 对象说明：提供“基础对象名称类（业务逻辑层）”针对OleDb的“增删改查”等各种数据访问方法，继承通用数据访问父类。
    /// 调用说明：通常不需要直接实例化本类，而使用“基础对象名称类（业务逻辑层）”中的DataAccess属性来调用本类所实现的方法。
    /// 作者姓名：lb,ykf
    /// 编写日期：
    /// </summary>
    public class Users
    {
        /// <summary>
        /// 将基础对象名称（Users）数据，采用INSERT操作插入到数据库中，并返回受影响的行数。
        /// </summary>
        /// <param name="users">基础对象名称（Users）实例对象</param>
        public int Insert(Model.Users users)
        {
            string sqlText = "INSERT INTO [Users]"
                           + "([UserName],[Description],[PassWord],[UserType])"
                           + "VALUES"
                           + "(@UserName,@Description,@PassWord,@UserType)";

            SqlParameter[] Parms = new SqlParameter[4];

            Parms[0] = new SqlParameter("@UserName", SqlDbType.NVarChar,20);
            Parms[1] = new SqlParameter("@Description", SqlDbType.NVarChar,50);
            Parms[2] = new SqlParameter("@PassWord", SqlDbType.NVarChar,20);
            Parms[3] = new SqlParameter("@UserType", SqlDbType.SmallInt,2);

            Parms[0].Value = users.UserName;
            Parms[1].Value = users.Description;
            Parms[2].Value = users.PassWord;
            Parms[3].Value = users.UserType;

            return SqlHelper.ExecuteNonQuery(sqlText, Parms);
        }


        /// <summary>
        /// 将基础对象名称（Users）数据，根据主键“ID（ID）”采用UPDATE操作更新到数据库中，并返回受影响的行数。
        /// </summary>
        /// <param name="users">基础对象名称（Users）实例对象</param>
        public int Update(Model.Users users)
        {
            string sqlText = "UPDATE [Users] SET "
                           + "[UserName]=@UserName,[Description]=@Description,[PassWord]=@PassWord,[UserType]=@UserType "
                           + "WHERE [ID]=@ID";
            SqlParameter[] Parms = new SqlParameter[5];

            Parms[0] = new SqlParameter("@UserName", SqlDbType.NVarChar,20);
            Parms[1] = new SqlParameter("@Description", SqlDbType.NVarChar,50);
            Parms[2] = new SqlParameter("@PassWord", SqlDbType.NVarChar,20);
            Parms[3] = new SqlParameter("@UserType", SqlDbType.SmallInt,2);
            Parms[4] = new SqlParameter("@ID", SqlDbType.Int,4);

            Parms[0].Value = users.UserName;
            Parms[1].Value = users.Description;
            Parms[2].Value = users.PassWord;
            Parms[3].Value = users.UserType;
            Parms[4].Value = users.ID;

            return SqlHelper.ExecuteNonQuery(sqlText, Parms);
        }


        /// <summary>
        /// 根据基础对象名称（Users）的主键“ID（ID）”采用DELETE操作从数据库中删除相关记录，并返回受影响的行数。
        /// </summary>
        /// <param name="iD">基础对象名称（Users）的主键“ID（ID）”</param>
        public int Delete(int iD)
        {
            string sqlText = "DELETE FROM [Users] "
                           + "WHERE [ID]=@ID";
            SqlParameter[] Parms = new SqlParameter[1];
            Parms[0] = new SqlParameter("@ID", SqlDbType.Int,4);
            Parms[0].Value = iD;
            return SqlHelper.ExecuteNonQuery(sqlText, Parms);
        }


        /// <summary>
        /// 根据基础对象名称（Users）的主键“ID（ID）”从数据库中获取基础对象名称（Users）的实例。
        /// 成功从数据库中取得记录返回新基础对象名称（Users）的实例“，没有取到记录返回null值。
        /// </summary>
        /// <param name="iD">基础对象名称（Users）的主键“ID（ID）”</param>
        public Model.Users GetDataByID(int iD)
        {
            Model.Users users = null;
            string sqlText = "SELECT [ID],[UserName],[Description],[PassWord],[UserType] "
                           + "FROM [Users] "
                           + "WHERE [ID]=@ID";

            SqlParameter[] Parms = new SqlParameter[1];
            Parms[0] = new SqlParameter("@ID", SqlDbType.Int,4);
            Parms[0].Value = iD;

            SqlDataReader oleDbDataReader = SqlHelper.ExecuteReader(sqlText, Parms);
            if (oleDbDataReader.Read())
            {
                users = new Model.Users();
                ReadUsersAllData(oleDbDataReader, users);
            }
            oleDbDataReader.Close();
            return users;
        }
        /// <summary>
        /// 从数据库中读取并返回所有基础对象名称（Users）List列表。
        /// </summary>
        public List<Model.Users> GetAllList()
        {
            string sqlText = "SELECT [ID],[UserName],[Description],[PassWord],[UserType] "
                           + "FROM [Users]";
            List<Model.Users> list = new List<Model.Users>();
            SqlDataReader oleDbDataReader = SqlHelper.ExecuteReader(sqlText, null);
            while (oleDbDataReader.Read())
            {
                Model.Users users = new Model.Users();
                ReadUsersAllData(oleDbDataReader, users);
                list.Add(users);
            }
            oleDbDataReader.Close();
            return list;
        }
        /// <summary>
        /// 从DataReader中读取数据，并为Users对象的所有属性赋值。该方法主要由该类的子类调用。
        /// </summary>
        /// <param name="sqlDataReader">IDataReader</param>
        /// <param name="users">基础对象名称（Users）实例对象</param>
        protected void ReadUsersAllData(IDataReader dataReader, Model.Users users)
        {
            // ID
            if (dataReader["ID"] != DBNull.Value)
                users.ID = Convert.ToInt32(dataReader["ID"]);
            // UserName
            if (dataReader["UserName"] != DBNull.Value)
                users.UserName = Convert.ToString(dataReader["UserName"]);
            // Description
            if (dataReader["Description"] != DBNull.Value)
                users.Description = Convert.ToString(dataReader["Description"]);
            // PassWord
            if (dataReader["PassWord"] != DBNull.Value)
                users.PassWord = Convert.ToString(dataReader["PassWord"]);
            // UserType
            if (dataReader["UserType"] != DBNull.Value)
                users.UserType = Convert.ToInt16(dataReader["UserType"]);
        }

    }
}
